function sleep(ms = 500) {
  return new Promise((r) => {
    const t = setTimeout(() => {
      clearTimeout(t)
      r()
    }, ms)
  })
}

/**
 * @description 保留小数点
 * @param {number} num 原始值
 * @param {number} count 小数位数
 */
function toFixed(num = 0, count = 2) {
  if (typeof num !== 'number') {
    throw new Error("argument 'num' must be a Number")
  }
  if (typeof count !== 'number') {
    throw new Error("argument 'count' must be a Number")
  }

  const _c = Math.max(1, Math.min(10, count))
  return parseFloat(num.toFixed(_c))
}

/**
 * @desc 随机字符串
 * @param {number?} len 字符串长度
 */
function randomStr(len = 16) {
  const l = Math.max(1, Math.min(100, len))
  let str = '_'

  while (str.length < l) {
    str += Math.random().toString(36).slice(2)
  }

  return str.slice(0, l)
}

/**
 * @description 限制数值大小
 * @param {number} num 目标数值
 * @param {number?} min 最小值
 * @param {number?} max 最大值
 * @returns
 */
function limit(num = 0, { min = -Infinity, max = Infinity } = {}) {
  return Math.min(max, Math.max(min, num))
}

export { randomStr, toFixed, limit, sleep }
